// mianwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QComboBox>
#include <QTableWidget>
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QScrollArea> // 添加 QScrollArea 头文件
#include <QPushButton>
#include <QVector> // 用于存储按钮
#include <QLabel>
#include <QTextEdit>
#include <random>
#include <QApplication>
#include <QScrollBar>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDebug>
#include <QVBoxLayout>
#include <QObject>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include "satellitehandler.h" // 包含 SatelliteHandler 类"
#include "config/configtablewidget.h" // 包含 ConfigTableWidget 类
#include <QIcon>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);

    public slots:
        void updateSatelliteList();
        void updateButtonStyles();
        void clearTableContents();
        void receiveData(); // 接收数据
        void linkserver();
        void handleNewConnection();
        void read_sqlite_data(QString name ,int prn);
        void read_everysqlite_data(QString name) ;
        QString creatsql(QString sql, QString name, int prn);
        void server_bd2geo_data(QSqlQuery query);
        void server_bd2meo_data(QSqlQuery query);
        void server_gal_data(QSqlQuery query);
        void server_gps_data(QSqlQuery query);
        bool tableExists( QString name,int prn);
        bool sever_all_data(QString  name,int prn);
    private slots:
        void onSatelliteButtonClicked(std::string name,int satelliteIndex); // 按钮点击槽函数

private:
    QComboBox *comboBox1;
    QComboBox *comboBox2;
    QTableWidget *tableWidget;
    QTextEdit *notificationsText; // 声明 notificationsText 成员变量
    QWidget *scrollContent; // 声明 scrollContent 成员变量
    QVBoxLayout *buttonLayout; // 声明 buttonLayout 成员变量
    std::mt19937 rng;
    std::uniform_int_distribution<int> dist;

    void loadStylesheet(); // 加载样式表
    void clearLayout(QLayout* layout); // 清空布局
    void createSatelliteButtons(std::string name, int index); // 创建卫星按钮
    void addSatelliteButtons(std::string name,int number); // 添加卫星按钮
    void updateTableHeaders(); // 更新表头
    void noticeMessage(int index, int satelliteID, QString source);

    QTimer *dataTimer; // 定义一个定时器
    SatelliteHandler *satelliteHandler; // 实例化 SatelliteHandler
    QTcpServer *tcpServer;
    QSqlDatabase db ;
};


#endif // MAINWINDOW_H